"""
邮件工具函数
"""
from django.core.mail import send_mail
from django.conf import settings
from django.template.loader import render_to_string
from django.utils.html import strip_tags
import logging

logger = logging.getLogger(__name__)


def send_verification_email(user, email, verification_code):
    """
    发送邮箱验证邮件
    
    Args:
        user: 用户对象
        email: 邮箱地址
        verification_code: 验证码
    """
    try:
        subject = '南昌旅游路线规划系统 - 邮箱验证'
        message = f"""
        尊敬的用户 {user.username}：
        
        您正在验证邮箱地址：{email}
        
        您的验证码是：{verification_code}
        
        验证码有效期为10分钟，请尽快完成验证。
        
        如果这不是您的操作，请忽略此邮件。
        
        南昌旅游路线规划系统
        """
        
        send_mail(
            subject=subject,
            message=message,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[email],
            fail_silently=False,
        )
        logger.info(f'邮箱验证邮件已发送: 用户={user.username}, 邮箱={email}')
        return True
    except Exception as e:
        logger.error(f'发送邮箱验证邮件失败: {str(e)}')
        return False


def send_reminder_email(user, reminder):
    """
    发送行程提醒邮件
    
    Args:
        user: 用户对象
        reminder: 行程提醒对象
    """
    try:
        if not user.email:
            logger.warning(f'用户 {user.username} 未设置邮箱，无法发送提醒邮件')
            return False
        
        itinerary = reminder.itinerary
        
        subject = f'行程提醒：{itinerary.title}'
        message = f"""
        尊敬的用户 {user.username}：
        
        您的行程提醒：
        
        行程标题：{itinerary.title}
        开始日期：{itinerary.start_date}
        结束日期：{itinerary.end_date}
        提醒类型：{reminder.get_reminder_type_display()}
        提醒时间：{reminder.reminder_time.strftime('%Y-%m-%d %H:%M:%S')}
        
        {reminder.message if reminder.message else '请记得按时出发，祝您旅途愉快！'}
        
        南昌旅游路线规划系统
        """
        
        send_mail(
            subject=subject,
            message=message,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[user.email],
            fail_silently=False,
        )
        logger.info(f'行程提醒邮件已发送: 用户={user.username}, 行程={itinerary.title}')
        return True
    except Exception as e:
        logger.error(f'发送行程提醒邮件失败: {str(e)}')
        return False


def send_notification_email(user, notification):
    """
    发送通知邮件
    
    Args:
        user: 用户对象
        notification: 通知对象
    """
    try:
        if not user.email:
            logger.warning(f'用户 {user.username} 未设置邮箱，无法发送通知邮件')
            return False
        
        subject = f'系统通知：{notification.title}'
        message = f"""
        尊敬的用户 {user.username}：
        
        {notification.body}
        
        南昌旅游路线规划系统
        """
        
        send_mail(
            subject=subject,
            message=message,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[user.email],
            fail_silently=False,
        )
        logger.info(f'通知邮件已发送: 用户={user.username}, 通知={notification.title}')
        return True
    except Exception as e:
        logger.error(f'发送通知邮件失败: {str(e)}')
        return False

